package thread;

import static java.lang.Thread.*;

class MyRunnable implements Runnable{
    @Override
    public void run() {
        while(true){
            System.out.println("hello thread");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }

    }
}

public class Demo2 {
    public static void main(String[] args) {
        Runnable runnable=new MyRunnable();//最终还是要
//        Runnable表示的是可运行的任务，这个任务是交给线程负责执行，还是交给其他的任务体来执行，Runnable本身并不关心
        //最后还是需要通过线程的t.start
        //为什么总是使用向上转型，实际上是因为java这个圈子就乐意这么写
        //如果C++的话就不是这样了，
        //这两个生态中鼓励的两个生态不一样
        //C++的人不喜向上转型，除法多态，会有额外的运行时开销，不符合C++把性能追求到极致这样的初心
        //java：程序员觉得，性能成本不是问题，（开发效率>运行效率）
//        使用向上转型。
        //多态实在封装的基础上更进一步，--多态只关心父类，哈哈
        //能向上转型就向上转型
        //前提是代码复杂的时候，你才能够体会到封装的意义
        //子类一定会继承父类的
        //很多的细节，你多思考，你就会董更多的细节

        Thread t=new Thread(runnable);
        t.start();
        while(true){
            System.out.println("hello main");
        }
    }
}
